05. 从远程仓库拉取修改

从远程仓库拉取修改

假如说我们处于这样一种情况: 远程 仓库上存在一些 commit ,但我们的 本地 仓库上没有这些 commit 。这种情况的原因有多个:你参与了团队协作,有一名同事将新更改推送到了远程仓库。或者,你在不同的电脑上开展同一个项目 -- 例如,你有一个办公电脑和一个私人电脑,你在两个电脑上都向仓库做了贡献。如果你从办公电脑上向远程仓库推送更改,则个人电脑上的本地仓库就不会反映这些更改。我们如何将远程仓库上的更改同步到本地仓库呢?这正是我们接下来要看的。我们先来看看拉取远程仓库修改的方式,然后我们将实际操作!

L1 - Git 拉取理论

虽然我已经说过了,但我要再强调一次。 本地 仓库中出现的分支实际上在跟踪 远程 仓库中的一个分支(例如,本地仓库中的 origin/master 称为 跟踪分支 ,因为它在跟踪远程仓库上简写名为 "origin" 的 master 分支)。

添加远程更改

由于我们的远程仓库中没有任何 commit ,且我们未与任何人协作,我们模拟协作环境。并通过 GitHub 的 Web 界面手动添加一些 commit 。

下面是一个演练视频。使用下面的代码片段跟着视频一起操作。

新的 CSS 内容

添加以下新规则集:

.destination:hover h2 {
    transform: rotate(0deg);
}

transition: transform 0.5s; 添加到 h2 规则集,现在它应该是:

h2 {
    margin: 0;
    transform: rotate(-45deg);
    transition: transform 0.5s;
    text-shadow: 0 0 5px #01579b;
}

L1 - 在 GitHub 上添加 commit

⚠️ 首选在本地工作 ⚠️

由于 GitHub 有一个 Web 界面,它允许你通过其界面手动添加 commit 。虽然你 可以 这么做,并不代表你 应该 这么做。我演示了用这种方式进行更改,是为了模拟远程仓库上的 commit ,而不是本地仓库上的 commit 。但是我建议你应该始终在本地开展项目工作,然后将更改推送到远程仓库。

取回远程 commit

现在我们比较本地仓库与远程仓库。我们的本地仓库中只有 三个 commit :

_我们的本地仓库中只有三个 commit。_

我们的本地仓库中只有三个 commit。

但远程仓库中实际有 四个 commit:

_GitHub 上的远程仓库中有四个 commit 。其中三个来自我们的本地仓库,一个是我们在 GitHub 上手动添加的。_

GitHub 上的远程仓库中有四个 commit 。其中三个来自我们的本地仓库,一个是我们在 GitHub 上手动添加的。

使用 git pull 拉取更改

本地 commit 在 5a010d1 处结束,而远程仓库有额外两个 commit - commit 4b81b2a b847434

另外,注意在我们的 本地 仓库中,当我们使用 git log 命令时, origin/master 分支仍然指向 commit 5a010d1

记住, origin/master 分支不实时映射远程仓库 master 分支所在的位置。如果远程仓库的 master 分支移动,本地 origin/master 分支仍会待在原地。要更新此分支,我们需要同步两个仓库。

git push 会同步 远程 仓库与 本地 仓库。要执行相反操作(将 本地仓库 远程仓库 同步),我们需要使用 git pull git pull 的格式与 git push 的非常相似 - 提供远程仓库的简写名,以及你要拉取 commit 的分支名称。

$ git pull origin master

_运行 `git pull origin master` 会检索 `origin` 远程仓库 `master` 分支中的 commit 。_

运行 git pull origin master 会检索 origin 远程仓库 master 分支中的 commit 。

运行此代码时需要注意几点:

  • 格式与 git push 非常相似 - 要对项目计数、压缩和打包
  • 它有一个短语 "fast-forward",这意味着 Git 进行了快进合并(我们一会儿深入研究)
    • 它显示类似于 git log --stat 的信息,其中显示更改的文件以及添加或删除了多少行

如果你不想自动将本地分支与跟踪分支合并,则不应使用 git pull ,而是使用另一个命令 git fetch 。当远程仓库包含你没有的 commit , 本地仓库也包含远程仓库所没有的 commit 时,你可能想这么做。

我们来看看 git fetch

小结

如果你想在本地仓库中包含远程仓库中的更改,那么你要 拉取 这些更改。要使用 Git 这样做,你需要使用 git pull 命令。你告诉 Git 你想获取修改的远程仓库的简写名以及包含你需要的更改的分支:

$ git pull origin master

在运行 git pull 时,会发生以下活动:

  • 远程分支上的 commit 会被复制到本地仓库
  • 本地跟踪分支( origin/master )移到指向最新的 commit
  • 本地跟踪分支( origin/master )合并到本地分支( master

另外,可以在 GitHub 上手动添加更改(但不建议这样做,所以别这样做)。